#ifndef JEUCOMBAT_H_
#define JEUCOMBAT_H_

typedef struct _JeuCombat JeuCombat;

#include "Jeu.h"
#include "Personnage.h"
#include <List.h>

/**
 * \fn Jeu* newJeuCombat(Jeu* jeu)
 * \brief Construit un jeu combat à partir d'un jeu
 * 
 * \note reprend le DP Decorator (ajoute des fonctionnalitées à un objet jeu..)
 * 
 * \param jeu Jeu
 * 
 * \return un pointeur vers jeu (pour des raisons pratiques, mais l'ancien pointeur peu aussi être utilisé)
 */
Jeu* newJeuCombat(Jeu* jeu);

/**
 * \fn Jeu* deleteJeuCombat(Jeu* jeu)
 * \brief Supprime les informations liée au combat pour redonner sa forme originel au jeu
 * 
 * \param jeu Jeu
 * 
 * \return un pointeur vers jeu (pour des raisons pratiques, mais l'ancien pointeur peu aussi être utilisé)
 */
Jeu* deleteJeuCombat(Jeu* jeu);

/**
 * \fn int jeuCombatExecuter(Jeu* jeu)
 * \brief Execute un combat :p (çay parti... çay la guuueeerrreeee ouaaiiii!!!)
 * 
 * \param jeu Jeu
 * 
 * \return 1 si le combat s'est correctement executé
 *         0 si il y a eut un problème
 */
int jeuCombatExecuter(Jeu* jeu);

/**
 * \fn int jeuCombatAddCombattant(Jeu* jeu,Personnage* perso)
 * \brief ajoute un combattant à un combat
 * 
 * \param jeu Jeu
 * \param perso Combattant ajouté au combat
 * 
 * \return 1 si tout s'est bien passé
 *         0 sinon
 */
int jeuCombatAddCombattant(Jeu* jeu,Personnage* perso);

/**
 * \fn int jeuCombatGetEnnemis(Jeu* jeu,List* persos)
 * \brief retrouve la liste des ennemis du personnage se battant actuellement
 * 
 * \param jeu Jeu
 * \param[out] persos liste des ennemis retournée
 * 
 * \return le nombre d'ennemis de la liste (0 en cas d'erreur)
 */
int jeuCombatGetEnnemis(Jeu* jeu,List* persos);

/**
 * \fn Personnage* jeuCombatGetPerso(Jeu* jeu)
 * \brief retrouve le personnage se battant actuellement
 * 
 * \param jeu Jeu
 * 
 * \return personnage se battant actuellement
 *         NULL en cas d'erreur
 */
Personnage* jeuCombatGetPerso(Jeu* jeu);



#endif /*JEUCOMBAT_H_*/

